package br.com.controlador;

import br.com.modelo.Caixa;
import br.com.modelo.Cidade;
import br.com.modelo.Fornecedor;
import java.io.Serializable;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import util.JPAUtil;
import util.JSFUtil;
import util.Utilitario;

/**
 *
 * @author Gilberto 02/07/2012
 */
@ManagedBean
@ViewScoped
public class FornecedorControler implements Serializable {

    private Fornecedor fornecedor;
    private List<Fornecedor> listFornecedores = new ArrayList<Fornecedor>();
    private List<Cidade> listCidades = new ArrayList<Cidade>();
    
    private Boolean alterando = false;

    @PostConstruct
    public void init() {
        setFornecedor(new Fornecedor());
        listFornecedores = Fornecedor.retornaFornecedores();
    }

    /**
     * @return the fornecedor
     */
    public Fornecedor getFornecedor() {
        return fornecedor;
    }

    /**
     * @param fornecedor the fornecedor to set
     */
    public void setFornecedor(Fornecedor fornecedor) {
        alterando = true;
        listCidades = Cidade.retornaCidadeDoEstado(fornecedor.getIdCidade().getEstado());
        this.fornecedor = fornecedor;
    }

    /**
     * @return the listFornecedores
     */
    public List<Fornecedor> getListFornecedores() {
        return listFornecedores;
    }

    /**
     * @param listFornecedores the listFornecedores to set
     */
    public void setListFornecedores(List<Fornecedor> listFornecedores) {
        this.listFornecedores = listFornecedores;
    }

    /**
     * @return the listCidades
     */
    public List<Cidade> getListCidades() {
        return listCidades;
    }

    /**
     * @param listCidades the listCidades to set
     */
    public void setListCidades(List<Cidade> listCidades) {
        this.listCidades = listCidades;
    }

    public void salvar() {
        try {
            //removendo a mascara
            fornecedor.setExcluido('N');
            fornecedor.setTelefone1(Utilitario.removeCaracterdeUmaString(getFornecedor().getTelefone1()));
            fornecedor.setTelefone2(Utilitario.removeCaracterdeUmaString(getFornecedor().getTelefone2()));
            fornecedor.setCep(Utilitario.removeCaracterdeUmaString(getFornecedor().getCep()));
            fornecedor.setCnpj(Utilitario.removeCaracterdeUmaString(getFornecedor().getCnpj()));
            fornecedor.setInscricaoEstadual(Utilitario.removeCaracterdeUmaString(getFornecedor().getInscricaoEstadual()));
            fornecedor.setRazaoSocial(getFornecedor().getRazaoSocial().toUpperCase());//colocando o nome em maisculo]

            //cidade e UF-- salvando a cidade e uf na tabela de funcionario alem do código do relacionanmento entre cidade
            Cidade cid = Cidade.retornaCidadePorId(fornecedor.getIdCidade().getId());
            fornecedor.setIdCidade(cid);
            fornecedor = fornecedor.salvar();
            listFornecedores = Fornecedor.retornaFornecedores();
            JSFUtil.addMessageSucesso("Fornecedor salvo!!");
            //retornando caixas e salvando nos caixas
            List<Caixa> caixa = CaixaControler.retornaCaixa();
            for (Caixa c : caixa) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    fornecedor = fornecedor.salvarCaixas(c.getIp());
                    JSFUtil.addMessageSucesso("Transferido para caixa(" + c.getNome() + ")");
                }
            }
            org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgfornecedor.hide();");
        } catch (Exception e) {
            JSFUtil.addMessageValidacao("Problema ao cadastrar o fornecedor!!");
        }
    }

        public void alterar() {
        alterando = false;
    }

        
    public void excluir() {
        try {
            fornecedor.setExcluido('S');
            fornecedor = fornecedor.salvar();
            listFornecedores = fornecedor.retornaFornecedores();
            //retornando caixas e salvando nos caixas
            List<Caixa> caixa = CaixaControler.retornaCaixa();
            for (Caixa c : caixa) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    fornecedor = fornecedor.salvarCaixas(c.getIp());
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Transferido para caixa(" + c.getNome() + ")", "Mensagem"));
                }
            }
                org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgfornecedor.hide();");
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro ao excluir funcionário!!", "Mensagem"));
        }
    }

    public List<String> retornaEstados() {
        return Cidade.retornEstados();
    }

    public void carregaCidades() {
        setListCidades(Cidade.retornaCidadeDoEstado(fornecedor.getIdCidade().getEstado()));
    }

    public void inicializaObj() {
        alterando = false;
        fornecedor = new Fornecedor();
    }

    public Boolean getAlterando() {
        return alterando;
    }

    public void setAlterando(Boolean alterando) {
        this.alterando = alterando;
    }
}
